//
//  main.c
//  ATM
//
//  Created by mac on 16-4-12.
//  Copyright (c) 2016年 zzn. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//函数声明区
void window();
void operFunc(int);
void getMoney();
void panduan();
void saveMoney();
void transforMoney();
void changePassword();
//全局变量声明区
int sysPassword=999999;//原始密码
double count=10000.0;
double otherscount=0.0;//别人的余额
//验证密码，欢迎界面
void checkPassword()
{
    int inPassword=0;
    int times=0;
    printf("欢迎使用ATM机\n");
    printf("请输入银行卡密码:");
    scanf("%d",&inPassword);
    while (inPassword<100000||inPassword>999999) {
        printf("错误，请输入六位数密码\n");
        printf("请输入银行卡密码:");
        scanf("%d",&inPassword);
    }
    times ++;
    while (inPassword!=sysPassword)
    {
        if (times==3) {
            printf("密码连续错误三次，你的卡已被冻结！\n");
            exit(0);
        }
        printf("密码%d次输入错误，还有%d次机会\n",times,3-times);
        printf("请输入银行卡密码:");
        scanf("%d",&inPassword);
        times++;
    }
    printf("密码输入正确\n");
    window();
}
//主界面函数
void window()
{
    int oper = 0;
    printf("欢迎使用ATM自动存取款机\n");
    printf("--------------\n");
    printf("1-取款   2-存款\n");
    printf("3-转账   4-改密\n");
    printf("5-查询   6-退卡\n");
    printf("--------------\n");
    printf("请输入操作指令(1-6):");
    scanf("%d",&oper);
    operFunc(oper);
    while (oper>6||oper<1) {
        printf("指令输入有误，请重新输入！");
        printf("请输入操作指令(1-6)");
    }
}
//指令处理函数
void operFunc(int op)
{
    //printf("指令传过来了\n");
    switch (op)
    {
        case 1:
            //取款功能
            printf("取款进行中...\n");
            getMoney();
            break;
        case 2:
            //存款功能
            printf("存款进行中...\n");
            saveMoney();
            break;
        case 3:
            //转账功能
            printf("转账进行中...\n");
            transforMoney();
            break;
        case 4:
            //改密功能
            printf("改密进行中...\n");
            changePassword();
            break;
        case 5:
            //查询功能
            printf("查询进行中...\n");break;
        case 6:
            printf("退卡进行中...\n");break;
            //退卡功能
        default:
            break;
    }
}

//是否返回主界面的函数
void returnWindow()
{
    printf("返回主界面(输入1)?  退卡(输入0)?\n");
    int choice=0;
    scanf("%d",&choice);
    if (choice==1)
    {
        window();
    }
    else
    {
        printf("欢迎下次继续使用\n");
        exit(0);
    }
}


//判断取款金额
void panduan(int outMoney)
{
    if (outMoney>count)
    {
        printf("***余额不足，取款失败***\n");
        printf("继续取款(输入1)?  退卡(输入0)?\n");
        int choice=0;
        scanf("%d",&choice);
        if (choice==1)
        {
            getMoney();
        }
        else
        {printf("欢迎下次继续使用\n");
            exit(0);
        }
        
    }
    else{
        count=count-outMoney;
        printf("取款成功，取款金额:%d，账户当前余额:%.2lf",outMoney,count);
    }
}

//取款函数
void getMoney()
{
    /*    int money=10000;
     int getMoney;
     printf("请输入取款金额:\n");
     scanf("%d",&getMoney);
     if (getMoney>money)
     {
     printf("余额不足，请重新输入!\n");
     printf("请输入取款金额:\n");
     scanf("%d",&getMoney);
     }
     else printf("取款成功!");*/
    int pick=0;//取款金额对应的编号
    int outMoney=0;
    printf("1-100    2-300\n");
    printf("3-500    4-1000\n");
    printf("5-2000   6-其他金额\n");
    printf("请选择你的取款金额:");
    scanf("%d",&pick);
    switch (pick)
    {
        case 1:
            outMoney=100;
            //判断取款余额是否足够
            panduan(outMoney);
            returnWindow();
            break;
        case 2:outMoney=300;
            panduan(outMoney);
            returnWindow();
            break;
        case 3:outMoney=500;
            panduan(outMoney);
            returnWindow();
            break;
        case 4:outMoney=1000;
            panduan(outMoney);
            returnWindow();
            break;
        case 5:outMoney=2000;
            panduan(outMoney);
            returnWindow();
            break;
        case 6:
            printf("请输入你的取款金额(整百):");
            scanf("%d",&outMoney);
            while (outMoney%100!=0||outMoney==0) {
                printf("取款金额输入有误，请输入整百!\n");
                printf("请输入你的取款金额(整百)");
                scanf("%d",&outMoney);
            }
            panduan(outMoney);
            break;
        default:
            break;
    }
    
}

//存款函数
void saveMoney(){
    int inputMoney=0;
    printf("请将钞票放入验钞口!\n");
    scanf("%d",&inputMoney);
    printf("正在验钞......\n");
    printf("你存款金额为:%d元!\n",inputMoney);
    printf("交易正在进行中...\n");
    count+=inputMoney;
    printf("存款成功，当前账户余额:%.2lf\n",count);
    returnWindow();
}
//转账函数
void transforMoney(){
    int transMoney=0;
    printf("请输入转账金额:");
    scanf("%d",&transMoney);
    if (transMoney>count) {
        printf("***转账失败，余额不足***\n");
        returnWindow();
    }
    else{
        count-=transMoney;
        otherscount+=transMoney;
        printf("转账成功，账户当前余额:%.2lf",count);
        returnWindow();
    }
    
}

//改密函数
void changePassword(){
    //1.验证原始密码
    //定义输入的密码变量名
    int inPassword=0;
    int times=0;//密码输入的次数
    int newPassword1=0;
    int newPassword2=0;
    printf("请输入银行卡原始密码:");
    scanf("%d",&inPassword);
    times ++;
    //strcmp(str1,str2);
    while (inPassword != sysPassword) {
        //判断是不是第三次输错，如果是直接退出程序
        //strcmp();
        if (times==3) {
            printf("原密码连续错误三次，你的卡已被冻结!\n");
            exit(0);
        }
        //提示密码错误，给机会重新输入
        printf("原密码第%d次输入错误，还有%d次机会!\n",times,3-times);
        printf("请输入银行卡密码:");
        scanf("%d",&inPassword);
        times ++ ;
    }
    //2.输入新密码
    printf("原密码输入正确!\n");
    printf("请输入新密码:");
    scanf("%d",&newPassword1);
    printf("请再次输入新密码:");
    scanf("%d",&newPassword2);
    while (newPassword1!=newPassword2) {
        printf("两次新密码输入不一致，请重新输入!\n");
        printf("请输入新密码:");
        scanf("%d",&newPassword1);
        printf("请再次输入新密码:");
        scanf("%d",&newPassword2);
        
    }
    sysPassword = newPassword1 ;
    printf("密码修改成功，请重新登录!\n");
    
    //3.重新登录
    checkPassword();
    
    
    
    
}

int main ()
{
    checkPassword();
    return 0;
}

